package tools;

import java.io.*;
import javax.swing.*;
import gui.*;

/**
 * Classe pour le gestion des fichiers 
 * 
 * @author			Christos Kornaros, Grégory Moinat, Nicolas Muller
 * @version			1.0, 02.04.2008
 * Fichier :		CodeFile.java
 * Remarque(s) :	-
 * Compilateur : 	jdk1.6.0_02
*/ 
public class CodeFile {

    // Chemin du fichier
    private String path = "";
    // Le texte initial (utilisé pour la vérification des modifications)
    private String initialText = "";
    

	/** 
	 * Constructeur pour un fichier
	 * 
	 */   
    public CodeFile () {
 
    }

	/** 
	 * Sélecteur du chemin du fichier
	 * 
	 * @return Retourne le chemin du fichier
	 */ 
    public String getPath () {
    	return path;
    }
    
	/** 
	 * Sélecteur du texte initial
	 * 
	 * @return Retourne le texte initial
	 * 
	 */ 
    public String getInitialText () {
    	return initialText;
    } 
    
	/** 
	 * Création d'un nouveau fichier
	 * 
	 */ 
    public void newFile () {
    	path = "";
    	initialText = "";
    }
    
	/** 
	 * Fermeture d'un fichier
	 * 
	 */ 
    public void close () {
    	path = "";
    	initialText = "";
    }

    
	/** 
	 * Ouverture d'un fichier
	 * 
	 * @param parent Zone de texte dans laquelle ouvrir le contenu du fichier
	 * @param path Chemin du fichier à ouvrir
	 */ 
    public void open (JColoredTextZone parent, String path) {
        this.path = path;
        BufferedReader fileInput;
        String text = "";
        try {
        	fileInput = new BufferedReader(new FileReader(path));
        
		    while(fileInput.ready()) {
		    	text += fileInput.readLine() + "\n";
		    }
		    // On charge le texte dans la zone de texte
		    parent.setText(text);
		    fileInput.close();
		    // On met à jour le texte initial
		    initialText = text;
        }
        catch(IOException e){
            JOptionPane.showMessageDialog(parent, 
            "Une erreur est survenue durant le chargement :\n" +
            e.getMessage()+"\nL'operation est abordée.",
            "Erreur de chargement",
            JOptionPane.ERROR_MESSAGE);
        }
    }

	/** 
	 * Sauvegarder un fichier
	 * 
	 * @param parent Zone de texte à sauvegarder dans un fichier
	 * @param path Chemin du fichier
	 */ 
    public void save (JColoredTextZone parent, String path) {
    	
    	this.path = path;
    	save(parent);

    }
    
	/** 
	 * Sauvegarder un fichier
	 * 
	 * @param parent Zone de texte à sauvegarder dans un fichier
	 */ 
    public void save (JColoredTextZone parent) {
        BufferedWriter fileOutput;
        String text;
        
        try {
        	fileOutput = new BufferedWriter(new FileWriter(path));
        	text = parent.getText();
            fileOutput.write(text);
            fileOutput.flush();
            fileOutput.close();
            // Mise à jour du texte initial
            initialText = text;
        }
        catch(IOException e){
            JOptionPane.showMessageDialog(parent, 
            "Une erreur est survenue durant la sauvegarde :\n" +
            e.getMessage()+"\nL'operation est abordée.",
            "Erreur de sauvegarde",
            JOptionPane.ERROR_MESSAGE);
        }
        
    }
}